查看原文
其他

Jlink使用技巧之虚拟串口功能

wcc149 电子电路开发学习 2021-01-31

前言

串口调试是单片机开发过程必不可少的一个功能,一般是使用一个UART-TTL的串口模块来实现串口的功能,其实下载调试使用的Jlink仿真器也可以实现串口调试的功能,本篇文章将介绍如何使用Jlink实现虚拟串口功能。

ITM简介

ITM是ARM Cortex-M系列内核芯片中的一种全新的调试功能,可以方便的通过调试器来实现printf调试功能。来自STM32中文参考手册的介绍:

ITM ( 指令跟踪微单元 instrumentation trace macrocell):ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成:

  • 软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。

  • 硬件跟踪:ITM会发布由DWT产生的信息包。

  • 时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。由ITM发送的信息包输出到TPIU(Trace Port Interface Unit),TPIU再添加一些额外的包(参考TPIU),然后输出完整的包序列给调试器。用户在设置或使用ITM之前,必需先使能异常调试和监视控制寄存器(Debug Exception and Monitor Control Register)的TRCEN位。

1.将ITM端口寄存器定义添加到源代码中

在程序开始处添加以下代码:

  1. #define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))

  2. #define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))

  3. #define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

  4. #define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))

  5. #define TRCENA          0x01000000

2.重定向printf函数

添加重定向printf函数代码:

  1. struct __FILE { int handle; /* Add whatever you need here */ };

  2. FILE __stdout;

  3. FILE __stdin;


  4. int fputc(int ch, FILE *f) {

  5.  if (DEMCR & TRCENA) {

  6.    while (ITM_Port32(0) == 0);

  7.    ITM_Port8(0) = ch;

  8.  }

  9.  return(ch);

  10. }

以上两段代码可以添加在usart.c文件中,如果文件中已经有了重定向printf的代码,要屏蔽掉,只保留一个重定向。

3.在应用程序中添加调试信息

在程序中添加需要输出的调试信息:

  1. printf("电子电路开发学习:mcu149, Test: %.1f \r\n" ,test += 0.1);

4.设置ITM端口0以使能调试功能

在进行调试之前要先使能ITM调试功能,具体配置如下图所示:

5.确认硬件的连接方式。

使用ITM调试机制必须使用SWD模式,而且必须要连接SWO,SWO对应JTAG接口的13脚,即至少需要连接4根线。如下图所示:

6.打开Debug(printf)窗口

进入Debug调试模式之后,调出Debug(printf)窗口,View - Serial Windows - Debug (printf) Viewer,如下图所示:

程序运行之后,就会在printf窗口看到串口输出的信息。

参考资料:

http://www.keil.com/support/man/docs/jlink/jlinktraceitm_viewer.htm


JLinkWindowsV614b软件下载:

公众号后台回复“JLINK”,可获得JLinkWindowsV614b.exe软件下载链接。

历史精选文章:


欢迎大家关注我的个人博客:http://www.wangchaochao.top/

或微信扫码关注我的公众号


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存